#ifndef __RAVI_ATTRIBUTE__
#define __RAVI_ATTRIBUTE__

#include <DLL.hpp>
#include <GL/glew.h>
#include <Vector3.hpp>
//#include <Colour4.hpp>
//#include <Content/Texture1D.hpp>
#include <Texture2D.hpp>
//#include <Content/Texture3D.hpp>
//#include <Content/TextureCube.hpp>

using namespace Olorin::Framework;

namespace Olorin
{
	namespace Graphics
	{
		class DLLAPI Attribute
		{
		protected:
			GLuint location;
		public:
			Attribute(const GLuint&);
			virtual void setValue(const float&) = 0;
			virtual void setValue(const int&) = 0;
			virtual void setValue(const Vector3&) = 0;
			virtual void setValue(const Texture&) = 0;
			//virtual void setValue(const Colour4&) = 0;
			const GLuint& getLocation() const;
		};
		
		class DLLAPI UniformAttribute : public Attribute
		{
		public:
			UniformAttribute(const GLuint&);
			void setValue(const float&);
			void setValue(const int&);
			void setValue(const Vector3&);
			void setValue(const Texture&);
		};
		
		class DLLAPI VertexAttribute: public Attribute
		{
		public:
			VertexAttribute(const GLuint&);
			void setValue(const float&);
			void setValue(const int&);
			void setValue(const Vector3&);
			void setValue(const Texture&);
		};
	}
}

#endif